package com.xuecheng.media.service;

import com.xuecheng.base.model.PageParams;
import com.xuecheng.base.model.PageResult;
import com.xuecheng.base.model.RestResponse;
import com.xuecheng.media.model.dto.UploadFilesParamDto;
import com.xuecheng.media.model.dto.UploadFilesResultDto;
import com.xuecheng.media.model.dto.QueryMediaParamsDto;
import com.xuecheng.media.model.po.MediaFiles;
import org.springframework.web.multipart.MultipartFile;

/**
 * @description 媒资文件管理业务类
 * @author Mr.M
 * @date 2022/9/10 8:55
 * @version 1.0
 */
public interface MediaFileService {

 /**
  * @description 媒资文件查询方法
  * @param pageParams 分页参数
  * @param queryMediaParamsDto 查询条件
  * @return com.xuecheng.base.model.PageResult<com.xuecheng.media.model.po.MediaFiles>
  * @author Mr.M
  * @date 2022/9/10 8:57
 */
 public PageResult<MediaFiles> queryMediaFiels(Long companyId,PageParams pageParams, QueryMediaParamsDto queryMediaParamsDto);

 /**
  * 文件上传
  * @param companyId
  * @param uploadFilesParamDto
  * @param localPath
  * @return
  */
 UploadFilesResultDto FileUpload(Long companyId, UploadFilesParamDto uploadFilesParamDto, String localPath);
 MediaFiles addMediaInfoToSQL(Long companyId,String fileMD5, UploadFilesParamDto uploadFilesParamDto, String bucket,String objectName);
 /**
  * @description 检查文件是否存在
  * @param fileMd5 文件的md5
  * @return com.xuecheng.base.model.RestResponse<java.lang.Boolean> false不存在，true存在
  * @author Mr.M
  * @date 2022/9/13 15:38
  */
 public RestResponse<Boolean> checkFile(String fileMd5);

 /**
  * @description 检查分块是否存在
  * @param fileMd5  文件的md5
  * @param chunkIndex  分块序号
  * @return com.xuecheng.base.model.RestResponse<java.lang.Boolean> false不存在，true存在
  * @author Mr.M
  * @date 2022/9/13 15:39
  */
 public RestResponse<Boolean> checkChunk(String fileMd5, int chunkIndex);

 /**
  * 上传视频，大文件
  * @param filePath
  * @param fileMd5
  * @param chunk
  * @return
  */
 RestResponse uploadChunk(String filePath, String fileMd5, int chunk);

 /**
  * 在minio中合并分块，形成完整的文件
  * @param companyId，公司ID用来标识一个公司
  * @param fileMd5，文件的名字
  * @param chunkTotal，分块的总数
  * @param uploadFileParamsDto，上传参数
  * @return
  */
 public RestResponse mergechunks(Long companyId,String fileMd5,int chunkTotal,UploadFilesParamDto uploadFileParamsDto);
}
